package vista;
import bean.Botonera;
import bean.JLabelCronometro;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import javabean.JPanelImagen;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import javax.swing.WindowConstants;

import controlador.ControladorBienvenida;



/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
/**
* Esta clase crea el ambiente gr�fico con el cual el usuario va a interactuar.
* 
* @author Lilianny Rodriguez 	C.I.: 19.323.400
* @author Jose Jerez 			C.I.: 18.560.575
* @author Jhoswar Fernandez		C.I.: 19.779.296
* @author Leandro Oliva			C.I.: 20.187.193
* 
*/
public class JPartida extends javax.swing.JFrame {
	
	private JPanelImagen 		pnlImagenPartida;
	private JBotones 			pnlBasico;
	private JBotones 			pnlIntermedio;
	private JBotones 			pnlAvanzado;
	private JMenu 				mnBarConsultar;
	private JMenuItem 			mnItemAvanzado;
	private JMenuItem 			mnItemIntermedio;
	private JMenuItem 			mnItemBasico;
	private JMenu 				jMenu1;
	private JMenuBar 			mnBarMenu;
	private JButton 			btnComprobarColores;
	private Botonera 			pnlColores;
	private JLabelCronometro 	jLabelCronometro1;
	private JLabel 				lblDescripcionNivel;
	private JLabel 				lblNivel;
	private JLabel 				lblNombreJugador;
	private JLabel 				lblJugador;
	private String 				nivelBoton;
	private boolean				valorBasico;
	private boolean				valorIntermedio;
	private boolean				valorAvanzado;
	
	public JPartida() {
		super("******** MASTERMIND ********");
		initGUI();
		this.setLocationRelativeTo(null);
		this.setResizable(false);
	}
	
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			{
				mnBarMenu = new JMenuBar();
				setJMenuBar(mnBarMenu);
				{
					jMenu1 = new JMenu();
					mnBarMenu.add(jMenu1);
				}
				{
					mnBarConsultar = new JMenu();
					mnBarMenu.add(mnBarConsultar);
					mnBarConsultar.setText("Consultar");
					{
						mnItemBasico = new JMenuItem();
						mnBarConsultar.add(mnItemBasico);
						mnItemBasico.setText("Nivel Basico");
					}
					{
						mnItemIntermedio = new JMenuItem();
						mnBarConsultar.add(mnItemIntermedio);
						mnItemIntermedio.setText("Nivel Intermedio");
					}
					{
						mnItemAvanzado = new JMenuItem();
						mnBarConsultar.add(mnItemAvanzado);
						mnItemAvanzado.setText("Nivel Avanzado");
					}
				}
			}
			{
				pnlImagenPartida = new JPanelImagen();
				getContentPane().add(pnlImagenPartida, BorderLayout.CENTER);
				pnlImagenPartida.setRutaImagen("/imagenes/imagenfondo.jpg");
				pnlImagenPartida.setPreferredSize(new java.awt.Dimension(852, 740));
				{
					pnlAvanzado = new JBotones();
					pnlImagenPartida.add(pnlAvanzado);
					pnlAvanzado.setBounds(106, 149, 275, 519);
					pnlAvanzado.setBackground(new java.awt.Color(255,255,255));
				}
				{
				pnlIntermedio = new JBotones();
				pnlImagenPartida.add(pnlIntermedio);
				pnlIntermedio.setBounds(106, 149, 231, 482);
				pnlIntermedio.setBackground(new java.awt.Color(255,255,255));
				}
				
				{
					pnlBasico = new JBotones();
					pnlImagenPartida.add(pnlBasico);
					pnlBasico.setBounds(106, 149, 191, 450);
					pnlBasico.setBackground(new java.awt.Color(255,255,255));
				}   	
			}
			{
				pnlColores = new Botonera();
				pnlImagenPartida.add(pnlColores);
				pnlColores.setBounds(51, 29, 512, 56);
				btnComprobarColores = new JButton();
				pnlColores.add(btnComprobarColores);
				btnComprobarColores.setText("COMPROBAR");
				btnComprobarColores.setBounds(370, 9, 131, 36);
				btnComprobarColores.setBackground(new java.awt.Color(255,255,255));
				btnComprobarColores.setActionCommand("Comprobar");
			}
			
			{
				lblJugador = new JLabel();
				pnlImagenPartida.add(lblJugador);
				lblJugador.setText("JUGADOR:");
				lblJugador.setBounds(500, 222, 138, 27);
				lblJugador.setFont(new java.awt.Font("Bitstream Charter",1,20));
			}
			{
				lblNombreJugador = new JLabel();
				pnlImagenPartida.add(lblNombreJugador);
				lblNombreJugador.setText("------------------");
				lblNombreJugador.setBounds(484, 255, 150, 38);
				lblNombreJugador.setFont(new java.awt.Font("Bitstream Charter",0,16));
			}
			{
				lblNivel = new JLabel();
				pnlImagenPartida.add(lblNivel);
				lblNivel.setText("NIVEL:");
				lblNivel.setBounds(500, 303, 89, 27);
				lblNivel.setFont(new java.awt.Font("Bitstream Charter",1,20));
			}
			{
				lblDescripcionNivel = new JLabel();
				pnlImagenPartida.add(lblDescripcionNivel);
				lblDescripcionNivel.setText("--------------------");
				lblDescripcionNivel.setBounds(484, 347, 113, 24);
				lblDescripcionNivel.setFont(new java.awt.Font("Bitstream Charter",0,16));
			}
			{
				jLabelCronometro1 = new JLabelCronometro();
				jLabelCronometro1.resetear();
				pnlImagenPartida.add(jLabelCronometro1);
				jLabelCronometro1.setBounds(516, 147, 105, 28);
				jLabelCronometro1.setFont(new java.awt.Font("Bitstream Charter",1,18));

			}
			
	
			pack();
			this.setSize(650, 750);
	
		} catch (Exception e) {
			//add your error handling code here
			e.printStackTrace();
		}
		    
		}
	
/**
 * Este M�todo agrega a cada opci�n un ActionListener para que ejecute la acci�n que le corresponde.
 * Recibe por par�metro el nivel para asignarle actionListener a los botones del panel que corresponda con el nivel.
 * 
 * @param nivel
 * @param actionListener
 */
	public void addListener(String nivel, ActionListener actionListener) {
		this.btnComprobarColores.addActionListener(actionListener);
		this.mnItemAvanzado.addActionListener(actionListener);
		this.mnItemIntermedio.addActionListener(actionListener);
		this.mnItemBasico.addActionListener(actionListener);
		
		if(nivel.equals("Basico")){
			valorBasico = true;
			for (int i = 0; i < 12; i++) {
				for (int j = 0; j < 4; j++)
				{
					this.pnlBasico.getButton(i,j).addActionListener(actionListener);
				}
			}
		} else if (nivel.equals("Intermedio")) {
			valorIntermedio = true;
			for (int a = 0; a < 13; a++){
				for (int e = 0; e < 5; e++)
				{
					this.pnlIntermedio.getButton(a,e).addActionListener(actionListener);
				}
			}
		} else if (nivel.equals("Avanzado")) {
			valorAvanzado = true;
			for (int k = 0; k < 14; k++)
			 	for (int t = 0; t < 6; t++)
				{
			 		this.pnlAvanzado.getButton(k,t).addActionListener(actionListener);
				}
		    }
	}

	public void mostrarSoloPanelBasico() {
		
		pnlBasico.crearboton(12, 4);
		for ( int i =1; i < 12; i++) {
		 	for (int j = 0; j < 4; j++){
		 		pnlBasico.getButton(i,j).setVisible(false);
			}
		}
		pnlAvanzado.setVisible(false);
		pnlIntermedio.setVisible(false);
	}
	
	public void mostrarSoloPanelIntermedio() {
		
		pnlIntermedio.crearboton(13, 5);
		for (int i =1; i < 13; i++) {
		 	for (int j = 0; j < 5; j++) {
		 		pnlIntermedio.getButton(i,j).setVisible(false);
			}
		}
		pnlBasico.setVisible(false);
		pnlAvanzado.setVisible(false);
	}
	
	public void mostrarSoloPanelAvanzado() {
		
		pnlAvanzado.crearboton(14, 6);
		for( int i =1; i < 14; i++){
		 	for (int j = 0; j < 6; j++)
			{
		 		pnlAvanzado.getButton(i,j).setVisible(false);
			}
		}
		pnlBasico.setVisible(false);
		pnlIntermedio.setVisible(false);
	}
	
	/**
	 * M�todo usado para mostrar la fila de botones siguiente, para darle al usuario la opci�n de realizar nuevos intentos.
	 * El par�metro "tipo" le indica la cantidad de columnas que va a afectar
	 * 
	 * @param x
	 * @param intento
	 * @param tipo
	 * @param nivel
	 */
	 public void botonesVisibles(boolean x ,int intento,int tipo, String nivel) {

		for (int i = 0; i <tipo; i++) {
			if (nivel.equals("Basico")) {
				pnlBasico.getButton(intento,i).setVisible(x);
			} else if (nivel.equals("Intermedio")) {
				pnlIntermedio.getButton(intento,i).setVisible(x);
			} else if (nivel.equals("Avanzado")) {
				pnlAvanzado.getButton(intento,i).setVisible(x);
			}
		}
	 }
	 
	 /**
	  * M�todo usado para bloquear la fila de botones anterior y as� permitir hacer nuevos intentos.
	  * El par�metro "tipo" le indica la cantidad de columnas que va a afectar.
	  * 
	  * @param x
	  * @param intento
	  * @param tipo
	  * @param nivel
	  */
	public void bloquearBotones(boolean x, int intento , int tipo, String nivel) { 		 
	    
		int j = intento--;
	   	
		for( int i =0; i < tipo ; i++){
	   		if (nivel.equals("Basico")) {
				pnlBasico.getButton(intento,i).setEnabled(x);
	   		} else if (nivel.equals("Intermedio")) {
				pnlIntermedio.getButton(intento,i).setEnabled(x);
	   		} else if (nivel.equals("Avanzado")) {
				pnlAvanzado.getButton(intento,i).setEnabled(x);
			}
	   	 }
	}
     
	public void crearMensajeGanador(int puntaje) {
		JOptionPane.showMessageDialog(null, "GANASTE "+puntaje+" PUNTOS", "FELICIDADES!!!", JOptionPane.OK_OPTION);
	}
	
	public void crearMensajePerdedor() {
		JOptionPane.showMessageDialog(null, "PERDISTE", "SIGUE INTENTANDO", JOptionPane.OK_OPTION);
	}
	
	public void pedirJugador() {
		
		Object nombre = "";
		
		while (nombre.equals("")) {
			
			nombre = JOptionPane.showInputDialog(this,"JUGADOR:", "Registrar Jugador",JOptionPane.OK_OPTION);
			
			if ((nombre == null)) { 
				JOptionPane.showMessageDialog(this,"ATENCI�N: Debe escribir un nombre");
				nombre = "";
			} else if (nombre != null && !nombre.equals("")) {
				this.lblNombreJugador.setText(""+nombre);
			}
		}		
	}
	
	public void pedirNivel(){
		
		Object selectedValue = null;
		String[] valores = {"Basico", "Intermedio","Avanzado" };
		
		while (selectedValue == null) {
			selectedValue = 
				  			JOptionPane.showInputDialog(
					            null,					// ventana madre
							    "Seleccione su Nivel",	// mensaje
							    "Seleccionar Nivel",	// titulo
							     JOptionPane.INFORMATION_MESSAGE, // tipo mensaje
							     null,					// icono
							     valores, 				// valores
							     valores[0]); 			// valor marcado inicialmente
		}
		String valor = selectedValue.toString();
		nivelBoton = valor;
		if (valor.equals("Basico")) {
			
			mostrarSoloPanelBasico();
		} else if (valor.equals("Intermedio")) {
			
			mostrarSoloPanelIntermedio();
		 } else if (valor.equals("Avanzado")) {
			
			mostrarSoloPanelAvanzado();
		 }
		 this.lblDescripcionNivel.setText(""+selectedValue);
		 this.jLabelCronometro1.iniciar();
	}

	public String getNivelBoton() {
		return nivelBoton;
	}

	public void setNivelBoton(String nivelBoton) {
		this.nivelBoton = nivelBoton;
	}

	public JBotones getPnlBasico() {
		return pnlBasico;
	}

	public JBotones getPnlIntermedio() {
		return pnlIntermedio;
	}

	public JBotones getPnlAvanzado() {
		return pnlAvanzado;
	}

	public JLabel getLblNombreJugador() {
		return lblNombreJugador;
	}

	public JLabel getLblDescripcionNivel() {
		return lblDescripcionNivel;
	}

	public JLabelCronometro getjLabelCronometro1() {
		return jLabelCronometro1;
	}
	
	public Botonera getBotonera(){
        return pnlColores;
    }
	
	public boolean getValorBasico() {
		return valorBasico;
	}

	public void setValorBasico(boolean valorBasico) {
		this.valorBasico = valorBasico;
	}

	public boolean getValorIntermedio() {
		return valorIntermedio;
	}

	public void setValorIntermedio(boolean valorIntermedio) {
		this.valorIntermedio = valorIntermedio;
	}

	public boolean getValorAvanzado() {
		return valorAvanzado;
	}

	public void setValorAvanzado(boolean valorAvanzado) {
		this.valorAvanzado = valorAvanzado;
	}
	
	public void setEnabledComprobar(boolean x) {
		btnComprobarColores.enable(x);
	}
}